// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue';
import App from './App';
import router from './router';
import VueResource from 'vue-resource';// vue http get or post
Vue.use(VueResource);//使用响应请求

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
import '@/icons/iconfont.css'
Vue.use(ElementUI);//ElementUI

import NProgress from 'nprogress';// vue nprogress loading bar
import 'nprogress/nprogress.css';// 进度条样式
NProgress.configure({// NProgress 进度条配置
    minimum : 0.1,//在开始使用的最小百分比变化
    easing: 'ease',
    speed: 1500,
    showSpinner:false,//关闭旋转圈
})

Vue.config.productionTip = false;
import {getToken,setToken,removeToken} from '@/tool/accessSession';//存取token
import * as utils from '@/tool/utils';//工具类函数
import * as filters from '@/tool/filter';//过滤器

// register global utility filters.
Object.keys(filters).forEach(key => {
    Vue.filter(key, filters[key])
});

import '@/styles/base.css';

import '@/styles/less/wallet-theme.less';


// 引入创建的Store
import store from '@/store/index';
let Store = store.state;

// 路由请求拦截之前
let indexScrollTop = 0;
let userauth = Store.StateUserAuth;
router.beforeEach((to,from,next)=>{

    let auth = to.meta.auth;//目标页面是否需要授权
    let level = to.meta.level;//需要授权的等级
    let isLogin = utils.userIsLogged(userauth.UserName,sessionStorage.user); //true用户已登录， false用户未登录


    // 授权匹配（未登录）
    if (auth && !isLogin && to.path !== '/login') {
        NProgress.done();
        // 登录前的路由名通过 dispatch 分发转存到state里面，方便登录后直接跳转到目标路径
        store.dispatch('A_USER_NOT_LOGIN_NAME',to.name);
        return next({ path: '/login' });
    }

    // 如果用户访问无权限目标页面时处理返回到上一页
    if(userauth.UserAuthLevel === 2 && to.name === 'applyforissuing'){
        return next({name:from.name});
    }

    // dispatch 分发转存路由名称(actions)
    store.dispatch('A_ROUTER_NAME',to.name);
    store.dispatch('A_ROUTER_PATH',to.path);

    // 返回路径列表滚动条定位
    if(to.path !== '/investement'){
        indexScrollTop = document.body.scrollTop;
    }

    // 设置路由页面文档标题
    document.title = to.meta.title || document.title;

    next();
})


/**
*注入http请求拦截器
*使用进度条显示载入
*/
Vue.http.interceptors.push((request, next) => {
    NProgress.start();

    // modify headers
    request.headers.set('token', getToken());

    next((response)=>{
        // 处理请求服务器错误时的提示，也可以做相应拦截
        if(response.status === 500){
            console.log(response.statusText);
            // router.push({ name: 'login' })
            ElementUI.MessageBox.alert(
                response.statusText,
                '服务器错误,请稍后再试...',
                    {
                        confirmButtonText: '确定',
                        callback: action => {
                        // ElementUI.Message({type: 'info', message: `action: ${action}`});
                        }
                    }
                )
            }
        // progress done
        NProgress.done();
    });
});

// 路由请求完成之后
router.afterEach(to=>{

    NProgress.done();
    /*
    *定位列表页的scrollTop值，便于访问完详情页后返回上一次的位置
    *但是不能使用this.$router.go(-1)进行返回操作，
    *只能使用<router-link to="/">来进行返回
    */
    Vue.nextTick(() => {
        document.body.scrollTop = indexScrollTop;
    });
})

/* eslint-disable no-new */
new Vue({
    el: '#app',
    router,
    store,
    template: '<App/>',
    components: { App }
})
